const express = require('express');
const cors = require('cors');
const dotenv = require('dotenv');
const { pool, testConnection } = require('./config/db');
const userRoutes = require('./routes/user');
const goodsRoutes = require('./routes/goods');
const orderRoutes = require('./routes/order');
const adminRoutes = require('./routes/admin');
const { createUserTable } = require('./models/user');
const { createGoodsTable, initSampleGoods } = require('./models/goods');
const { createOrderTable } = require('./models/order');
const orderAddressRoutes = require('./routes/order_address');
// 加载环境变量
dotenv.config();

const app = express();
const PORT = process.env.PORT || 3000;

// 中间件
app.use(cors());
app.use(express.json());
// 配置静态文件服务，使uploads目录中的图片可以通过URL访问
app.use(express.static('public'));

// 路由
app.use('/api/user', userRoutes);
app.use('/api/goods', goodsRoutes);
app.use('/api/order', orderRoutes);
app.use('/api/admin', adminRoutes);
app.use('/api/order-address', orderAddressRoutes);

// 测试接口
app.get('/api/test', (req, res) => {
  res.json({
    success: true,
    message: '服务器运行正常',
    timestamp: new Date().toISOString()
  });
});

// 初始化数据库和启动服务器
const startServer = async () => {
  try {
    // 测试数据库连接
    await testConnection();
    
    // 尝试创建数据表，如果表已存在则忽略错误
    try {
      await createUserTable();
      await createGoodsTable();
      await createOrderTable();
      
      // 尝试初始化示例商品数据
      try {
        await initSampleGoods();
      } catch (dataError) {
        console.warn('初始化示例数据失败，但不影响服务器启动:', dataError.message);
      }
    } catch (tableError) {
      console.warn('创建数据表失败，但不影响服务器启动:', tableError.message);
    }
    
    // 启动服务器
    app.listen(PORT, () => {
      console.log(`服务器运行在 http://localhost:${PORT}`);
    });
  } catch (error) {
    console.error('服务器启动失败:', error);
  }
};

// 启动服务器
startServer();

// 导出app对象，方便测试
module.exports = app;